<?php
/**
 * 分账任务
 */

namespace app\common\library\job;

use Exception;
use service\SeparateJobService;
use think\queue\Job;

class SeparateJob
{

    public function fire(Job $job, array $data)
    {
        try {
            $service = new SeparateJobService($data, (object)$data['secret']);
            $service->{$job->getQueue()}($data);
            $job->delete();
        } catch (Exception $e) {
            if ($job->attempts() < 3) { // 例如最多重试3次
                $job->release(60); // 在60秒后再次尝试执行
            } else {
                $this->failed($job, $data);
            }
        }
    }

    /**
     * 任务执行失败后的回调
     *
     * @param Job $job 当前任务对象
     * @param array $data 邮件发送所需数据
     */
    public function failed(Job $job, array $data)
    {
        $job->delete();
    }
}